查看原文
其他

基于SpringBoot 适合学习的开源社区平台

TJ TJ君 2022-05-13

大家好,我是TJ

关注TJ君,回复“武功秘籍”免费获取计算机宝典书籍

TJ君将之前发过的各种项目及工具进行了整理,收录到了GitHub项目,欢迎各位小伙伴光临Star,地址如下:https://github.com/Wechat-TJ/TJ-WORLD-FORU

今天TJ君要给大家分享的是一个集合各种技术的开源社区平台,Echo

平台使用的主要技术有:SpringBoot + MyBatis + MySQL + Redis + Kafka + Elasticsearch + Spring Security,常见社区平台中应有的帖子、评论、私信、系统通知、点赞、关注、搜索、用户设置、数据统计等模块都可以支持实现。

前后端主要用到的技术栈有:

  • 前端

    • Thymeleaf
    • Bootstrap 4.x
    • Jquery
    • Ajax
  • 后端

    • Spring
    • Spring Boot 2.1.5 RELEASE
    • Spring MVC
    • ORM:MyBatis
    • 数据库:MySQL 5.7
    • 分布式缓存:Redis
    • 本地缓存:Caffeine
    • 消息队列:Kafka 2.13-2.7.0
    • 搜索引擎:Elasticsearch 6.4.3
    • 安全:Spring Security
    • 邮件任务:Spring Mail
    • 分布式定时任务:Spring Quartz
    • 日志:SLF4J(日志接口) + Logback(日志实现)

这些技术栈与功能列表的详细对应关系可从下图看出:

TJ君简单看了一下,如果要更进一步详细描述平台已经实现的功能的话,就是:

  • 注册

  • 登录 | 登出

    • 动态生成验证码
    • 记住我
  • 账号设置

    • 修改头像
    • 修改密码
  • 过滤敏感词

    • 前缀树
  • 帖子模块

    • 发布帖子(过滤敏感词)
    • 分页显示所有的帖子
      • 支持按照 “发帖时间” 显示
      • 支持按照 “热度排行” 显示(Spring Quartz)
    • 查看帖子详情
    • 权限管理(Spring Security + Thymeleaf Security)
      • 未登录用户无法发帖
      • “版主” 可以看到帖子的置顶和加精按钮并执行相应操作
      • “管理员” 可以看到帖子的删除按钮并执行相应操作
      • “普通用户” 无法看到帖子的置顶、加精、删除按钮,也无法执行相应操作
  • 评论模块

    • 发布对帖子的评论(过滤敏感词)
    • 分页显示评论
    • 发布对评论的回复(过滤敏感词)
    • 权限管理(Spring Security)
      • 未登录用户无法使用评论功能
  • 私信模块

    • 发送私信(过滤敏感词)
    • 私信列表
      • 查询当前用户的会话列表
      • 每个会话只显示一条最新的私信
      • 支持分页显示
    • 私信详情
      • 查询某个会话所包含的所有私信
      • 访问私信详情时,将显示的私信设为已读状态
      • 支持分页显示
    • 权限管理(Spring Security)
  • 统一处理 404 / 500 异常

    • 普通请求异常
    • 异步请求异常
  • 统一记录日志

  • 点赞模块

    • 支持对帖子、评论/回复点赞
    • 第 1 次点赞,第 2 次取消点赞
    • 首页统计帖子的点赞数量
    • 详情页统计帖子和评论/回复的点赞数量
    • 详情页显示当前登录用户的点赞状态(赞过了则显示已赞)
    • 统计我的获赞数量
    • 权限管理(Spring Security)
      • 未登录用户无法使用点赞相关功能
  • 关注模块

    • 关注功能
    • 取消关注功能
    • 统计用户的关注数和粉丝数
    • 我的关注列表(查询某个用户关注的人),支持分页
    • 我的粉丝列表(查询某个用户的粉丝),支持分页
    • 权限管理(Spring Security)
      • 未登录用户无法使用关注相关功能
  • 系统通知模块

    • 通知列表
      • 显示评论、点赞、关注三种类型的通知
    • 通知详情
      • 分页显示某一类主题所包含的通知
      • 进入某种类型的系统通知详情,则将该页的所有未读的系统通知状态设置为已读
    • 未读数量
      • 分别显示每种类型的系统通知的未读数量
      • 显示所有系统通知的未读数量
    • 导航栏显示所有消息的未读数量(未读私信 + 未读系统通知)
    • 权限管理(Spring Security)
      • 未登录用户无法使用系统通知功能
  • 搜索模块

  • 网站数据统计(管理员专属)

    • 独立访客 UV
      • 支持单日查询和区间日期查询
    • 日活跃用户 DAU
      • 支持单日查询和区间日期查询
    • 权限管理(Spring Security)
      • 只有管理员可以查看网站数据统计
  • 优化网站性能

    • 处理每次请求时,都要通过拦截器根据登录凭证查询用户信息,访问的频率非常高。因此将已成功登录的用户信息在缓存 Redis 中保存一段时间,查询用户信息的时候优先从缓存中取值;若缓存中没有该用户信息,则将其存入缓存;用户信息变更时清除对应的缓存数据;
    • 引入本地缓存 Caffeine,缓存热帖列表和帖子的总数,避免缓存雪崩(这里面还能再加一层二级缓存 Redis)。

本地部署

先确保一下环境都已安装 Java 8、 MySQL 5.7、 Redis、 Kafka 2.13-2.7.0、 Elasticsearch 6.4.3

然后修改本地配置文件信息:

  • application-develop.properties:

    • MySQL
    • Spring Mail(邮箱需要开启 SMTP 服务)
    • Kafka:consumer.group-id(该字段见 Kafka 安装包中的 consumer.proerties,可自行修改, 修改完毕后需要重启 Kafka)
    • Elasticsearch:cluster-name(该字段见 Elasticsearch 安装包中的 elasticsearch.yml,可自行修改)
    • 七牛云(需要新建一个七牛云的对象存储空间,用来存放上传的头像图片)
  • logback-spring-develop.xml:

    • LOG_PATH:日志存放的位置

需要注意的是,每次运行需要打开如下软件:

  • MySQL
  • Redis
  • Elasticsearch
  • Kafka

另外,还需要建好数据库 greatecommunity,然后依次运行项目 sql 文件夹下的这几个 sql 文件建立数据库表:

同时针对每一个功能模块,平台作者还提供了自己的思维导图,方便用户理解:

例如注册功能

登录登出功能

几乎每个功能都有,也方便小伙伴们进行理解和学习。

最后看下实际的运行效果:

预祝大家学习愉快~~~项目地址如下:

点击下方卡片,关注公众号“TJ君

回复“echo2022”,获取仓库地址

关注我,每天了解一个牛x、好用、有趣的东东


往期推荐

超方便的开源视频下载工具

专为新手入门准备的Vue+Spring Boot+Mysql的前后端开发项目

二次元老婆生成器,想要什么样的老婆就靠自己勤劳的双手啦


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存